home *** CD-ROM | disk | FTP | other *** search
/ Giga Games 1 / Giga Games.iso / net / usenet / volume7 / nethack3 / patch7w < prev    next >
Encoding:
Internet Message Format  |  1990-02-26  |  55.8 KB

  1. Path: uunet!zephyr.ens.tek.com!tekred!saab!billr
  2. From: billr@saab.CNA.TEK.COM (Bill Randle)
  3. Newsgroups: comp.sources.games
  4. Subject: v09i023:  NetHack3 -  display oriented dungeons & dragons (Ver. 3.0), Patch7w
  5. Message-ID: <5237@tekred.CNA.TEK.COM>
  6. Date: 24 Feb 90 01:06:22 GMT
  7. Sender: news@tekred.CNA.TEK.COM
  8. Lines: 1238
  9. Approved: billr@saab.CNA.TEK.COM
  10.  
  11. Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu>
  12. Posting-number: Volume 9, Issue 23
  13. Archive-name: NetHack3/Patch7w
  14. Patch-To: NetHack3: Volume 7, Issue 56-93
  15.  
  16.  
  17.  
  18. #! /bin/sh
  19. # This is a shell archive.  Remove anything before this line, then unpack
  20. # it by saving it into a file and typing "sh file".  To overwrite existing
  21. # files, type "sh file -c".  You can also feed this as standard input via
  22. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  23. # will see the following message at the end:
  24. #        "End of archive 23 (of 30)."
  25. # Contents:  include/system.h src/monst.c2
  26. # Wrapped by billr@saab on Wed Feb 21 10:04:45 1990
  27. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  28. if test -f 'include/system.h' -a "${1}" != "-c" ; then 
  29.   echo shar: Renaming existing file \"'include/system.h'\" to \"'include/system.h.orig'\"
  30.   mv -f 'include/system.h' 'include/system.h.orig'
  31. fi
  32. echo shar: Extracting \"'include/system.h'\" \(7445 characters\)
  33. sed "s/^X//" >'include/system.h' <<'END_OF_FILE'
  34. X/*    SCCS Id: @(#)system.h 3.0    88/10/10 */
  35. X/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  36. X/* NetHack may be freely redistributed.  See license for details. */
  37. X
  38. X#ifndef SYSTEM_H
  39. X#define SYSTEM_H
  40. X
  41. X#define E extern
  42. X
  43. X/* some old <sys/types.h> may not define off_t and size_t; if your system is
  44. X * one of these, define them by hand below
  45. X */
  46. X#if !defined(THINKC4) && !defined(AMIGA) && !defined(MACOS)
  47. X# include <sys/types.h>
  48. X#endif
  49. X
  50. X#if defined(TOS) && defined(__GNUC__) && !defined(_SIZE_T)
  51. X# define _SIZE_T
  52. X#endif
  53. X
  54. X#if defined(MSDOS) || ((defined(AMIGA) || defined(MACOS)) && !defined(THINKC4))
  55. X# ifndef _SIZE_T
  56. X#  define _SIZE_T
  57. Xtypedef unsigned int    size_t;
  58. X# endif
  59. X#endif
  60. X
  61. X#ifdef ULTRIX
  62. X/* The Ultrix v3.0 <sys/types.h> seems to be very wrong. */
  63. X# define time_t long
  64. X#endif
  65. X#if defined(ULTRIX) || defined(VMS)
  66. X# define off_t long
  67. X#endif
  68. X#if defined(AZTEC) || defined(THINKC4) || (defined(MSDOS) && defined(__TURBOC__))
  69. Xtypedef long    off_t;
  70. X#endif
  71. X
  72. X
  73. X/* You may want to change this to fit your system, as this is almost
  74. X * impossible to get right automatically.
  75. X * This is the type of signal handling functions.
  76. X */
  77. X#if defined(__STDC__) || defined(ULTRIX)
  78. X    /* also SVR3 and later, Sun4.0 and later */
  79. X# define SIG_RET_TYPE void (*)()
  80. X#else
  81. X    /* BSD, SIII, SVR2 and earlier, Sun3.5 and earlier */
  82. X# define SIG_RET_TYPE int (*)()
  83. X#endif
  84. X
  85. X#if defined(BSD) || defined(ULTRIX) || defined(RANDOM)
  86. XE long random();
  87. XE void FDECL(srandom, (unsigned int));
  88. X#else
  89. XE long lrand48();
  90. XE void srand48();
  91. X#endif /* BSD || ULTRIX || RANDOM */
  92. X
  93. X#if !defined(BSD) || defined(ultrix)
  94. X            /* real BSD wants all these to return int */
  95. X# ifndef MSDOS
  96. XE void FDECL(exit, (int));
  97. X# endif /* MSDOS */
  98. XE void FDECL(free, (genericptr_t));
  99. X# ifdef AMIGA
  100. XE int FDECL(perror, (const char *));
  101. X# else
  102. X#  ifndef MACOS
  103. XE void FDECL(perror, (const char *));
  104. X#  endif
  105. X# endif
  106. X#endif
  107. X#if defined(BSD) || defined(ULTRIX) || (defined(MACOS) && !defined(THINKC4))
  108. XE int qsort();
  109. X#else
  110. X# ifndef LATTICE
  111. XE void FDECL(qsort, (genericptr_t,size_t,size_t,int(*)(genericptr_t,genericptr_t)));
  112. X# endif
  113. X#endif
  114. X
  115. X#ifdef ULTRIX
  116. XE long FDECL(lseek, (int,off_t,int));
  117. X  /* Ultrix 3.0 man page mistakenly says it returns an int. */
  118. XE int FDECL(write, (int,char *,int));
  119. X#else
  120. XE long FDECL(lseek, (int,long,int));
  121. XE int FDECL(write, (int,genericptr_t,unsigned));
  122. X#endif /* ULTRIX */
  123. XE int FDECL(unlink, (const char *));
  124. X
  125. X#ifdef MSDOS
  126. XE int FDECL(close, (int));
  127. XE int FDECL(read, (int,genericptr_t,unsigned int));
  128. XE int FDECL(open, (const char *,int,...));
  129. XE int FDECL(dup2, (int, int));
  130. XE int FDECL(setmode, (int,int));
  131. XE int FDECL(kbhit, (void));
  132. XE int FDECL(chdir, (char *));
  133. XE char *FDECL(getcwd, (char *,int));
  134. X#endif
  135. X
  136. X#ifdef TOS
  137. XE int FDECL(creat, (const char *, int));
  138. X#endif
  139. X
  140. X/* both old & new versions of Ultrix want these, but real BSD does not */
  141. X#ifdef ultrix
  142. XE void abort();
  143. XE void bcopy();
  144. X#endif
  145. X#ifdef MSDOS
  146. XE void FDECL(abort, (void));
  147. XE void FDECL(_exit, (int));
  148. XE int FDECL(system, (const char *));
  149. X#endif
  150. X#ifdef HPUX
  151. XE long FDECL(fork, (void));
  152. X#endif
  153. X
  154. X#ifdef SYSV
  155. XE char *memcpy();
  156. X#endif
  157. X#ifdef HPUX
  158. XE void *FDECL(memcpy, (char *,char *,int));
  159. XE int FDECL(memcmp, (char *,char *,int));
  160. XE void *FDECL(memset, (char*,int,int));
  161. X#endif
  162. X#ifdef MSDOS
  163. X# if defined(TOS) && defined(__GNUC__)
  164. XE int FDECL(memcmp, (const char *,const char *,size_t));
  165. XE char *FDECL(memcpy, (char *,const char *,size_t));
  166. XE char *FDECL(memset, (char*,int,size_t));
  167. X# else
  168. X#  ifndef LATTICE
  169. X#    ifdef MSC
  170. Xvoid * _CDECL memcpy(void *, const void *, size_t);
  171. Xvoid * _CDECL memset(void *, int, size_t);
  172. X#    else
  173. XE int FDECL(memcmp, (char *,char *,unsigned int));
  174. XE char *FDECL(memcpy, (char *,char *,unsigned int));
  175. XE char *FDECL(memset, (char*,int,int));
  176. X#    endif
  177. X#  endif
  178. X# endif /* TOS */
  179. X#endif
  180. X
  181. X#if defined(BSD) && defined(ultrix)    /* i.e., old versions of Ultrix */
  182. XE void sleep();
  183. X#endif
  184. X#if defined(ULTRIX) || defined(SYSV)
  185. XE unsigned sleep();
  186. X#endif
  187. X#if defined(HPUX)
  188. XE unsigned int FDECL(sleep, (unsigned int));
  189. X#endif
  190. X
  191. XE char *FDECL(getenv, (const char *));
  192. XE char *getlogin();
  193. X#ifdef HPUX
  194. XE long FDECL(getuid, (void));
  195. XE long FDECL(getgid, (void));
  196. XE long FDECL(getpid, (void));
  197. X#else
  198. XE int FDECL(getpid, (void));
  199. X#endif
  200. X
  201. X/*# string(s).h #*/
  202. X
  203. XE char    *FDECL(strcpy, (char *,const char *));
  204. XE char    *FDECL(strncpy, (char *,const char *,size_t));
  205. XE char    *FDECL(strcat, (char *,const char *));
  206. XE char    *FDECL(strncat, (char *,const char *,size_t));
  207. X
  208. X#if defined(SYSV) || defined(MSDOS) || defined(AMIGA) || defined(THINK_C) || defined(VMS) || defined(HPUX)
  209. XE char    *FDECL(strchr, (const char *,int));
  210. XE char    *FDECL(strrchr, (const char *,int));
  211. X#else /* BSD */
  212. XE char    *FDECL(index, (const char *,int));
  213. XE char    *FDECL(rindex, (const char *,int));
  214. X#endif
  215. X
  216. X
  217. XE int    FDECL(strcmp, (const char *,const char *));
  218. XE int    FDECL(strncmp, (const char *,const char *,size_t));
  219. X#ifdef MSDOS
  220. XE size_t FDECL(strlen, (const char *));
  221. X#else
  222. X# ifdef HPUX
  223. XE unsigned int    FDECL(strlen, (char *));
  224. X# else
  225. X#  ifdef THINKC4
  226. XE size_t    FDECL(strlen, (char *));
  227. X#  else
  228. XE int    FDECL(strlen, (char *));
  229. X#  endif /* THINKC4 */
  230. X# endif /* HPUX */
  231. X#endif /* MSDOS */
  232. X
  233. X/* Old varieties of BSD have char *sprintf().
  234. X * Newer varieties of BSD have int sprintf() but allow for the old char *.
  235. X * Several varieties of SYSV and PC systems also have int sprintf().
  236. X * If your system doesn't agree with this breakdown, you may want to change
  237. X * this declaration, especially if your machine treats the types differently.
  238. X */
  239. X#if (defined(BSD) || defined(ULTRIX)) && !defined(DGUX) && !defined(NeXT)
  240. X# define OLD_SPRINTF
  241. XE char *sprintf();
  242. X#else
  243. X# ifndef TOS    /* problem with prototype mismatches with <stdio.h> */
  244. XE int FDECL(sprintf, (char *,const char *,...));
  245. X# endif
  246. X#endif
  247. X
  248. X#ifdef NEED_VARARGS
  249. X# if defined(USE_STDARG) || defined(USE_VARARGS)
  250. XE int FDECL(vsprintf, (char *, const char *, va_list));
  251. XE int FDECL(vprintf, (const char *, va_list));
  252. X# else
  253. X#  define vprintf    printf
  254. X#  define vsprintf    sprintf
  255. X#  define vpline    pline
  256. X# endif
  257. X#endif /* NEED_VARARGS */
  258. X
  259. X#define Sprintf    (void) sprintf
  260. X#define Strcat    (void) strcat
  261. X#define Strcpy    (void) strcpy
  262. X
  263. X#if defined(MACOS) && defined(CUSTOM_IO)
  264. X# undef printf
  265. X# undef puts
  266. X# undef putchar
  267. X# undef putc
  268. X# define printf  (void) mprintf
  269. X# define puts     mputs
  270. X# define putchar mputc
  271. X# define putc     mputc
  272. X# define Printf  (void) mprintf
  273. X#else
  274. X# define Printf  (void) printf
  275. X#endif
  276. X
  277. X#ifdef NEED_VARARGS
  278. X# define Vprintf (void) vprintf
  279. X# define Vsprintf (void) vsprintf
  280. X#endif
  281. X
  282. X#ifdef TOS
  283. XE int FDECL(tgetent, (const char *,const char *));
  284. XE int FDECL(tgetnum, (const char *));
  285. XE int FDECL(tgetflag, (const char *));
  286. XE char *FDECL(tgetstr, (const char *,char **));
  287. XE char *FDECL(tgoto, (const char *,int,int));
  288. XE void FDECL(tputs, (const char *,int,int (*)()));
  289. X#else
  290. XE int FDECL(tgetent, (char *,char *));
  291. XE int FDECL(tgetnum, (char *));
  292. XE int FDECL(tgetflag, (char *));
  293. XE char *FDECL(tgetstr, (char *,char **));
  294. XE char *FDECL(tgoto, (char *,int,int));
  295. XE void FDECL(tputs, (char *,int,int (*)()));
  296. X#endif
  297. X
  298. X#ifndef MACOS
  299. XE genericptr_t FDECL(malloc, (size_t));
  300. X#endif
  301. X
  302. X/* time functions */
  303. X
  304. X#ifndef MACOS
  305. X# ifndef LATTICE
  306. XE struct tm *FDECL(localtime, (const time_t *));
  307. X# endif
  308. X
  309. X# if defined(ULTRIX) || defined(SYSV) || defined(MSDOS)
  310. XE time_t FDECL(time, (time_t *));
  311. X# else
  312. XE long FDECL(time, (time_t *));
  313. X# endif /* ULTRIX */
  314. X#endif
  315. X
  316. X#ifdef MSDOS
  317. X# ifdef abs
  318. X# undef abs
  319. X# endif
  320. XE int FDECL(abs, (int));
  321. XE int FDECL(atoi, (const char *));
  322. X#endif
  323. X
  324. X#undef E
  325. X
  326. X#endif /* SYSTEM_H */
  327. END_OF_FILE
  328. if test 7445 -ne `wc -c <'include/system.h'`; then
  329.     echo shar: \"'include/system.h'\" unpacked with wrong size!
  330. fi
  331. # end of 'include/system.h'
  332. if test -f 'src/monst.c2' -a "${1}" != "-c" ; then 
  333.   echo shar: Renaming existing file \"'src/monst.c2'\" to \"'src/monst.c2.orig'\"
  334.   mv -f 'src/monst.c2' 'src/monst.c2.orig'
  335. fi
  336. echo shar: Extracting \"'src/monst.c2'\" \(46080 characters\)
  337. sed "s/^X//" >'src/monst.c2' <<'END_OF_FILE'
  338. X
  339. X/* horrible kludge alert:
  340. X * This is a compiler-specific kludge to allow the compilation of monst.o in
  341. X * two pieces, by defining first SPLITMON_1 and then SPLITMON_2. The
  342. X * resulting assembler files (monst1.s and monst2.s) are then run through
  343. X * sed to change local symbols, concatenated together, and assembled to
  344. X * produce monst.o. THIS ONLY WORKS WITH THE ATARI GCC, and should only
  345. X * be done if you don't have enough memory to compile monst.o the "normal"
  346. X * way.  --ERS
  347. X */
  348. X
  349. X#ifndef SPLITMON_1
  350. X#ifdef SPLITMON_2
  351. Xstruct permonst _mons2[] = {
  352. X#endif
  353. X/*    giant Humanoids */
  354. X    { "ettin", S_GIANT, 10, 12, 3, 0, 0, (G_GENO | 1),
  355. X      { { AT_WEAP, AD_PHYS, 2, 8 }, { AT_WEAP, AD_PHYS, 3, 6 },
  356. X        NO_ATTK, NO_ATTK, NO_ATTK },
  357. X      50, 500, 0, MS_GRUNT, MZ_HUGE, M1_ANIMAL | M1_HUMANOID | M1_COLLECT,
  358. X      M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE, C(BROWN) },
  359. X    { "giant", S_GIANT, 6, 6, 0, 0, 2, (G_GENO | G_NOGEN | 1),
  360. X      { { AT_WEAP, AD_PHYS, 2, 10 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  361. X      75, 750, 0, MS_SILENT, MZ_HUGE, M1_HUMANOID | M1_COLLECT | M1_JEWELS,
  362. X       M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY, C(RED) },
  363. X    { "stone giant", S_GIANT, 6, 6, 0, 0, 2, (G_GENO | G_SGROUP | 1),
  364. X      { { AT_WEAP, AD_PHYS, 2, 10 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  365. X      75, 750, 0, MS_SILENT, MZ_HUGE, M1_HUMANOID | M1_COLLECT | M1_JEWELS,
  366. X       M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY, C(GRAY) },
  367. X    { "hill giant", S_GIANT, 8, 10, 6, 0, -2, (G_GENO | G_SGROUP | 1),
  368. X      { { AT_WEAP, AD_PHYS, 2, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  369. X      70, 700, 0, MS_SILENT, MZ_HUGE, M1_HUMANOID | M1_COLLECT | M1_JEWELS,
  370. X      M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY, C(CYAN) },
  371. X    { "fire giant", S_GIANT, 9, 12, 4, 5, 2, (G_GENO | G_SGROUP | 1),
  372. X      { { AT_WEAP, AD_PHYS, 2, 10 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  373. X      75, 750, 0, MS_SILENT, MZ_HUGE,
  374. X      M1_HUMANOID | M1_FIRE_RES | M1_COLLECT | M1_JEWELS,
  375. X      M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY, C(YELLOW) },
  376. X    { "frost giant", S_GIANT, 10, 12, 3, 10, -3, (G_GENO | G_SGROUP | 1),
  377. X      { { AT_WEAP, AD_PHYS, 2, 12 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  378. X      75, 750, 0, MS_SILENT, MZ_HUGE,
  379. X      M1_HUMANOID | M1_COLD_RES | M1_COLLECT | M1_JEWELS,
  380. X      M2_GIANT | M2_STRONG | M2_ROCKTHROW | M2_NASTY, C(WHITE) },
  381. X    { "titan", S_GIANT, 16, 18, -3, 70, 9, 1,
  382. X      { { AT_WEAP, AD_PHYS, 2, 8 }, { AT_MAGC, AD_SPEL, 0, 0 },
  383. X        NO_ATTK, NO_ATTK, NO_ATTK },
  384. X      90, 900, 0, MS_SILENT, MZ_HUGE, M1_FLY | M1_HUMANOID | M1_MAGIC |
  385. X      M1_COLLECT, M2_STRONG | M2_ROCKTHROW | M2_NASTY, C(MAGENTA) },
  386. X    { "minotaur", S_GIANT, 15, 15, 6, 0, 0, (G_GENO | G_NOGEN),
  387. X      { { AT_CLAW, AD_PHYS, 3, 10 }, { AT_CLAW, AD_PHYS, 3, 10 },
  388. X        { AT_BUTT, AD_PHYS, 2, 8}, NO_ATTK, NO_ATTK},
  389. X      70, 700, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_HUMANOID,
  390. X      M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE, C(BROWN) },
  391. X    { "owlbear", S_GIANT, 5, 12, 5, 0, 0, (G_GENO | 3),
  392. X      { { AT_CLAW, AD_PHYS, 1, 6 }, { AT_CLAW, AD_PHYS, 1, 6 },
  393. X        { AT_HUGS, AD_PHYS, 2, 8 }, NO_ATTK, NO_ATTK },
  394. X      70, 700, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_HUMANOID,
  395. X      M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE, C(BROWN) },
  396. X/*    Invisible stalker    */
  397. X    { "stalker", S_STALKER, 8, 12, 3, 0, 0, (G_GENO | 3),
  398. X      { { AT_CLAW, AD_PHYS, 4, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  399. X      40, 400, 0, MS_SILENT, MZ_LARGE, M1_ANIMAL | M1_FLY | M1_SEE_INVIS,
  400. X      M2_WANDER | M2_STALK | M2_HOSTILE | M2_STRONG, C(WHITE) },
  401. X/*    Jabberwock */
  402. X    { "jabberwock", S_JABBERWOCK, 15, 12, -2, 50, 0, (G_GENO | 1),
  403. X      { { AT_BITE, AD_PHYS, 2, 10 }, { AT_BITE, AD_PHYS, 2, 10 },
  404. X        { AT_CLAW, AD_PHYS, 2, 10 }, { AT_CLAW, AD_PHYS, 2, 10 }, NO_ATTK },
  405. X      60, 600, 0, MS_BURBLE, MZ_LARGE, M1_ANIMAL | M1_COLLECT | M1_FLY,
  406. X      M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE, C(BRIGHT|RED) },
  407. X/*    Kops    */
  408. X#ifdef KOPS
  409. X    { "Keystone Kop", S_KOP, 1, 6, 7, 10, 9, (G_GENO | G_LGROUP | G_NOGEN),
  410. X      { { AT_WEAP, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  411. X      20, 200, 0, MS_ARREST, MZ_HUMAN, M1_HUMANOID | M1_COLLECT,
  412. X      M2_HUMAN | M2_WANDER | M2_HOSTILE, C(BLUE) },
  413. X    { "Kop Sergeant", S_KOP, 2, 8, 6, 10, 10, (G_GENO | G_SGROUP | G_NOGEN),
  414. X      { { AT_WEAP, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  415. X      20, 200, 0, MS_ARREST, MZ_HUMAN, M1_HUMANOID | M1_COLLECT,
  416. X      M2_HUMAN | M2_WANDER | M2_HOSTILE | M2_STRONG, C(BLUE) },
  417. X    { "Kop Lieutenant", S_KOP, 3, 10, 5, 20, 11, (G_GENO | G_NOGEN),
  418. X      { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  419. X      20, 200, 0, MS_ARREST, MZ_HUMAN, M1_HUMANOID | M1_COLLECT,
  420. X      M2_HUMAN | M2_WANDER | M2_HOSTILE | M2_STRONG, C(CYAN) },
  421. X    { "Kop Kaptain", S_KOP, 4, 12, 4, 20, 12, (G_GENO | G_NOGEN),
  422. X      { { AT_WEAP, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  423. X      20, 200, 0, MS_ARREST, MZ_HUMAN, M1_HUMANOID | M1_COLLECT,
  424. X      M2_HUMAN | M2_WANDER | M2_HOSTILE | M2_STRONG, C(HI_LORD) },
  425. X#endif
  426. X/*    Liches     */
  427. X    { "lich", S_LICH, 11, 6, 0, 30, -9, (G_GENO | 1),
  428. X      { { AT_TUCH, AD_COLD, 1, 10 }, { AT_MAGC, AD_SPEL, 0, 0 },
  429. X        NO_ATTK, NO_ATTK, NO_ATTK }, 30, 100, 0, MS_MUMBLE, MZ_HUMAN,
  430. X      M1_HUMANOID | M1_POIS | M1_COLD_RES | M1_REGEN | M1_MAGIC,
  431. X      M2_UNDEAD | M2_HOSTILE, C(BROWN) },
  432. X    { "demilich", S_LICH, 14, 9, -2, 60, -12, (G_GENO | 1),
  433. X      { { AT_TUCH, AD_COLD, 3, 4 }, { AT_MAGC, AD_SPEL, 0, 0 },
  434. X        NO_ATTK, NO_ATTK, NO_ATTK }, 30, 100, 0, MS_MUMBLE, MZ_HUMAN,
  435. X      M1_HUMANOID | M1_POIS | M1_COLD_RES | M1_REGEN | M1_MAGIC,
  436. X      M2_UNDEAD | M2_HOSTILE, C(RED) },
  437. X    { "master lich", S_LICH, 17, 9, -4, 90, -15, (G_HELL | G_GENO | 1),
  438. X      { { AT_TUCH, AD_COLD, 3, 6 }, { AT_MAGC, AD_SPEL, 0, 0 },
  439. X        NO_ATTK, NO_ATTK, NO_ATTK }, 30, 100, 0, MS_MUMBLE, MZ_HUMAN,
  440. X      M1_HUMANOID | M1_POIS | M1_FIRE_RES | M1_COLD_RES | M1_REGEN |
  441. X      M1_MAGIC, M2_UNDEAD | M2_HOSTILE, C(HI_LORD) },
  442. X/*    Mummies     */
  443. X    { "kobold mummy", S_MUMMY, 3, 8, 6, 20, -2, (G_GENO | G_NOCORPSE | 1),
  444. X      { { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  445. X      10, 100, 0, MS_SILENT, MZ_SMALL,
  446. X      M1_HUMANOID | M1_POIS, M2_UNDEAD | M2_HOSTILE, C(BROWN) },
  447. X    { "gnome mummy", S_MUMMY, 4, 10, 6, 20, -3, (G_GENO | G_NOCORPSE | 1),
  448. X      { { AT_CLAW, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  449. X      10, 100, 0, MS_SILENT, MZ_SMALL,
  450. X      M1_HUMANOID | M1_POIS, M2_UNDEAD | M2_HOSTILE, C(RED) },
  451. X    { "orc mummy", S_MUMMY, 5, 10, 5, 20, -4, (G_GENO | G_NOCORPSE | 1),
  452. X      { { AT_CLAW, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  453. X      15, 150, 0, MS_SILENT, MZ_HUMAN,
  454. X      M1_HUMANOID | M1_POIS | M1_GREEDY | M1_JEWELS,
  455. X      M2_UNDEAD | M2_HOSTILE | M2_ORC, C(GRAY) },
  456. X    { "elf mummy", S_MUMMY, 6, 12, 4, 30, -5, (G_GENO | G_NOCORPSE | 1),
  457. X      { { AT_CLAW, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  458. X      35, 350, 0, MS_SILENT, MZ_HUMAN,
  459. X      M1_HUMANOID | M1_POIS | M1_SLEE_RES,
  460. X      M2_UNDEAD | M2_HOSTILE | M2_ELF, C(GREEN) },
  461. X    { "human mummy", S_MUMMY, 6, 12, 4, 30, -5, (G_GENO | G_NOCORPSE | 1),
  462. X      { { AT_CLAW, AD_PHYS, 2, 4 }, { AT_CLAW, AD_PHYS, 2, 4 },
  463. X        NO_ATTK, NO_ATTK, NO_ATTK },
  464. X      40, 400, 0, MS_SILENT, MZ_HUMAN,
  465. X      M1_HUMANOID | M1_POIS, M2_UNDEAD | M2_HOSTILE, C(GRAY) },
  466. X    { "ettin mummy", S_MUMMY, 7, 12, 4, 30, -6, (G_GENO | G_NOCORPSE | 1),
  467. X      { { AT_CLAW, AD_PHYS, 2, 6 }, { AT_CLAW, AD_PHYS, 2, 6 },
  468. X        NO_ATTK, NO_ATTK, NO_ATTK }, 50, 500, 0, MS_SILENT, MZ_HUGE,
  469. X      M1_HUMANOID | M1_POIS,
  470. X      M2_UNDEAD | M2_HOSTILE | M2_STRONG, C(BLUE) },
  471. X    { "giant mummy", S_MUMMY, 8, 14, 3, 30, -7, (G_GENO | G_NOCORPSE | 1),
  472. X      { { AT_CLAW, AD_PHYS, 3, 4 }, { AT_CLAW, AD_PHYS, 3, 4 },
  473. X        NO_ATTK, NO_ATTK, NO_ATTK }, 75, 750, 0, MS_SILENT, MZ_HUGE,
  474. X      M1_HUMANOID | M1_POIS | M1_JEWELS,
  475. X      M2_UNDEAD | M2_HOSTILE | M2_GIANT | M2_STRONG, C(CYAN) },
  476. X/*    Nagas    */
  477. X    { "red naga hatchling", S_NAGA, 3, 10, 6, 0, 0, G_GENO,
  478. X      { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  479. X      20, 100, 0, MS_MUMBLE, MZ_LARGE,
  480. X      M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_FIRE_RES | M1_POIS_RES,
  481. X      M2_STRONG, C(RED) },
  482. X    { "black naga hatchling", S_NAGA, 3, 10, 6, 0, 0, G_GENO,
  483. X      { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  484. X      20, 100, 0, MS_MUMBLE, MZ_LARGE,
  485. X      M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_POIS_RES | M1_STON_RES,
  486. X      M2_STRONG, C(BLACK) },
  487. X    { "golden naga hatchling", S_NAGA, 3, 10, 6, 0, 0, G_GENO,
  488. X      { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  489. X      20, 100, 0, MS_MUMBLE, MZ_LARGE,
  490. X      M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_POIS_RES,
  491. X      M2_STRONG, C(HI_GOLD) },
  492. X    { "guardian naga hatchling", S_NAGA, 3, 10, 6, 0, 0, G_GENO,
  493. X      { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  494. X      20, 100, 0, MS_MUMBLE, MZ_LARGE,
  495. X      M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_POIS_RES,
  496. X      M2_STRONG, C(GREEN) },
  497. X    { "red naga", S_NAGA, 6, 12, 4, 0, -4, (G_GENO | 1),
  498. X      { { AT_BITE, AD_PHYS, 2, 4 }, { AT_BREA, AD_FIRE, 2, 6 },
  499. X        NO_ATTK, NO_ATTK, NO_ATTK }, 60, 400, 0, MS_MUMBLE, MZ_HUGE,
  500. X      M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_POIS_RES | M1_FIRE_RES,
  501. X      M2_STRONG | M2_EGGS, C(RED) },
  502. X    { "black naga", S_NAGA, 8, 14, 2, 10, 4, (G_GENO | 1),
  503. X      { { AT_BITE, AD_PHYS, 2, 6 }, { AT_SPIT, AD_ACID, 0, 0 },
  504. X        NO_ATTK, NO_ATTK, NO_ATTK }, 60, 400, 0, MS_MUMBLE, MZ_HUGE,
  505. X      M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_POIS_RES |
  506. X      M1_ACID | M1_STON_RES,
  507. X      M2_STRONG | M2_EGGS, C(BLACK) },
  508. X    { "golden naga", S_NAGA, 10, 14, 2, 70, 5, (G_GENO | 1),
  509. X      { { AT_BITE, AD_PHYS, 2, 6 }, { AT_MAGC, AD_SPEL, 4, 6 },
  510. X        NO_ATTK, NO_ATTK, NO_ATTK }, 60, 400, 0, MS_MUMBLE, MZ_HUGE,
  511. X      M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_POIS_RES,
  512. X      M2_STRONG | M2_EGGS, C(HI_GOLD) },
  513. X    { "guardian naga", S_NAGA, 12, 16, 0, 50, 7, (G_GENO | 1),
  514. X      { { AT_BITE, AD_PLYS, 1, 6 }, { AT_HUGS, AD_PHYS, 2, 4 },
  515. X        { AT_SPIT, AD_DRST, 1, 6 }, NO_ATTK, NO_ATTK },
  516. X      60, 400, 0, MS_MUMBLE, MZ_HUGE,
  517. X      M1_NOLIMBS | M1_SLITHY | M1_THICK_HIDE | M1_POIS_RES | M1_POIS,
  518. X      M2_STRONG | M2_EGGS, C(GREEN) },
  519. X/*    Ogres    */
  520. X    { "ogre", S_OGRE, 5, 10, 5, 0, -3, (G_SGROUP | G_GENO | 1),
  521. X      { { AT_WEAP, AD_PHYS, 2, 5 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  522. X      60, 500, 0, MS_GRUNT, MZ_LARGE,
  523. X      M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT,
  524. X      M2_STRONG, C(BROWN) },
  525. X    { "ogre lord", S_OGRE, 7, 12, 3, 30, -5, (G_GENO | 2),
  526. X      { { AT_WEAP, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  527. X      70, 700, 0, MS_GRUNT, MZ_LARGE,
  528. X      M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT,
  529. X      M2_STRONG | M2_LORD, C(RED) },
  530. X    { "ogre king", S_OGRE, 7, 14, 4, 60, -7, (G_GENO | 2),
  531. X      { { AT_WEAP, AD_PHYS, 3, 5 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  532. X      70, 750, 0, MS_GRUNT, MZ_LARGE,
  533. X      M1_HUMANOID | M1_GREEDY | M1_JEWELS | M1_COLLECT,
  534. X      M2_STRONG | M2_PRINCE, C(HI_LORD) },
  535. X/*    Puddings */
  536. X    { "gray ooze", S_PUDDING, 3, 1, 8, 0, 0, (G_GENO | 2),
  537. X      { { AT_BITE, AD_RUST, 2, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  538. X      50, 500, 0, MS_SILENT, MZ_MEDIUM,
  539. X      M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_POIS_RES,
  540. X      M2_HOSTILE | M2_OMNIVORE, C(GRAY) },
  541. X    { "brown pudding", S_PUDDING, 5, 3, 8, 0, 0, (G_GENO | 1),
  542. X      { { AT_BITE, AD_DCAY, 0, 0 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  543. X      50, 500, 0, MS_SILENT, MZ_MEDIUM,
  544. X      M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_POIS_RES | M1_COLD_RES |
  545. X      M1_ELEC_RES, M2_HOSTILE | M2_OMNIVORE, C(BROWN) },
  546. X    { "black pudding", S_PUDDING, 10, 6, 6, 0, 0, (G_GENO | 1),
  547. X      { { AT_BITE, AD_RUST, 3, 8 }, { AT_NONE, AD_RUST, 0, 0 },
  548. X        NO_ATTK, NO_ATTK, NO_ATTK },
  549. X      50, 500, 0, MS_SILENT, MZ_LARGE,
  550. X      M1_AMORPHOUS | M1_NOEYES | M1_NOLIMBS | M1_POIS_RES | M1_COLD_RES |
  551. X      M1_ELEC_RES, M2_HOSTILE | M2_OMNIVORE, C(BLACK) },
  552. X/*    Quantum Mechanics    */
  553. X    { "quantum mechanic", S_QUANTMECH, 7, 12, 3, 10, 0, (G_GENO | 3),
  554. X      { { AT_CLAW, AD_TLPT, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  555. X      2, 20, 0, MS_HUMANOID, MZ_HUMAN,
  556. X      M1_HUMANOID | M1_POIS | M1_TPORT, M2_HOSTILE, C(CYAN) },
  557. X/*    Rust Monster    */
  558. X    { "rust monster", S_RUSTMONST, 5, 18, 2, 0, 0, (G_GENO | 2),
  559. X      { { AT_TUCH, AD_RUST, 0, 0 }, { AT_TUCH, AD_RUST, 0, 0 },
  560. X        { AT_NONE, AD_RUST, 0, 0 }, NO_ATTK, NO_ATTK },
  561. X      50, 500, 0, MS_SILENT, MZ_MEDIUM,
  562. X      M1_SWIM | M1_ANIMAL | M1_NOHANDS, M2_HOSTILE | M2_METALLIVORE,
  563. X      C(BROWN) },
  564. X/*    Snakes    */
  565. X    { "garter snake", S_SNAKE, 1, 8, 8, 0, 0, (G_LGROUP | G_GENO | 1),
  566. X      { { AT_BITE, AD_PHYS, 1, 2 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  567. X      5, 60, 0, MS_HISS, MZ_TINY,
  568. X      M1_SWIM | M1_CONCEAL | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY,
  569. X      M2_CARNIVORE | M2_EGGS, C(GREEN) },
  570. X    { "snake", S_SNAKE, 4, 15, 3, 0, 0, (G_GENO | 2),
  571. X      { { AT_BITE, AD_DRST, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  572. X      10, 80, 0, MS_HISS, MZ_SMALL,
  573. X      M1_SWIM | M1_CONCEAL | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY |
  574. X      M1_POIS | M1_POIS_RES,
  575. X      M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(BROWN) },
  576. X    { "water moccasin", S_SNAKE, 4, 15, 3, 0, 0,
  577. X      (G_GENO | G_NOGEN | G_LGROUP),
  578. X      { { AT_BITE, AD_DRST, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  579. X      10, 100, 0, MS_HISS, MZ_SMALL,
  580. X      M1_SWIM | M1_CONCEAL | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY |
  581. X      M1_POIS | M1_POIS_RES,
  582. X      M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(RED) },
  583. X    { "pit viper", S_SNAKE, 6, 15, 2, 0, 0, (G_GENO | 1),
  584. X      { { AT_BITE, AD_DRST, 1, 4 }, { AT_BITE, AD_DRST, 1, 4 },
  585. X        NO_ATTK, NO_ATTK, NO_ATTK }, 5, 60, 0, MS_HISS, MZ_MEDIUM,
  586. X      M1_SWIM | M1_CONCEAL | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY |
  587. X      M1_POIS | M1_POIS_RES,
  588. X      M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(BLUE) },
  589. X    { "cobra", S_SNAKE, 6, 18, 2, 0, 0, (G_GENO | 1),
  590. X      { { AT_BITE, AD_DRST, 2, 4 }, { AT_SPIT, AD_BLND, 0, 0 },
  591. X        NO_ATTK, NO_ATTK, NO_ATTK }, 15, 100, 0, MS_HISS, MZ_MEDIUM,
  592. X      M1_SWIM | M1_CONCEAL | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY |
  593. X      M1_POIS | M1_POIS_RES,
  594. X      M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(BLUE) },
  595. X    { "python", S_SNAKE, 6, 3, 5, 0, 0, (G_GENO | 1),
  596. X      { { AT_BITE, AD_DRST, 1, 4 }, { AT_HUGS, AD_WRAP, 2, 4 },
  597. X        NO_ATTK, NO_ATTK, NO_ATTK }, 15, 100, 0, MS_HISS, MZ_LARGE,
  598. X      M1_SWIM | M1_NOLIMBS | M1_ANIMAL | M1_SLITHY | M1_POIS | M1_POIS_RES,
  599. X      M2_HOSTILE | M2_STRONG | M2_CARNIVORE | M2_EGGS, C(MAGENTA) },
  600. X/*    Trolls    */
  601. X    { "troll", S_TROLL, 7, 12, 4, 0, -3, (G_GENO | 2),
  602. X      { { AT_CLAW, AD_PHYS, 4, 2 }, { AT_CLAW, AD_PHYS, 4, 2 },
  603. X        { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK },
  604. X      40, 400, 0, MS_GRUNT, MZ_LARGE, M1_HUMANOID | M1_REGEN,
  605. X      M2_STRONG | M2_STALK | M2_CARNIVORE | M2_HOSTILE, C(BROWN) },
  606. X    { "ice troll", S_TROLL, 9, 10, 2, 20, -3, (G_GENO | 1),
  607. X      { { AT_CLAW, AD_PHYS, 2, 6 }, { AT_CLAW, AD_COLD, 2, 6 },
  608. X        { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK },
  609. X      40, 300, 0, MS_GRUNT, MZ_LARGE,
  610. X      M1_HUMANOID | M1_COLD_RES | M1_REGEN,
  611. X      M2_STRONG | M2_STALK | M2_CARNIVORE | M2_HOSTILE, C(WHITE) },
  612. X    { "rock troll", S_TROLL, 9, 12, 0, 0, -3, (G_GENO | 1),
  613. X      { { AT_CLAW, AD_PHYS, 2, 8 }, { AT_WEAP, AD_PHYS, 3, 6 },
  614. X        { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK },
  615. X      40, 300, 0, MS_GRUNT, MZ_LARGE,
  616. X      M1_HUMANOID | M1_REGEN | M1_COLLECT,
  617. X      M2_STRONG | M2_STALK | M2_CARNIVORE | M2_HOSTILE, C(CYAN) },
  618. X    { "water troll", S_TROLL, 11, 14, 4, 40, -3, (G_NOGEN | G_GENO),
  619. X      { { AT_CLAW, AD_PHYS, 2, 8 }, { AT_CLAW, AD_PHYS, 2, 8 },
  620. X        { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK },
  621. X      40, 400, 0, MS_GRUNT, MZ_LARGE,
  622. X      M1_SWIM | M1_HUMANOID | M1_REGEN,
  623. X      M2_STRONG | M2_STALK | M2_CARNIVORE | M2_HOSTILE, C(BLUE) },
  624. X#ifdef TOLKIEN
  625. X    { "Olog-hai", S_TROLL, 13, 12, -4, 0, -7, (G_GENO | 1),
  626. X      { { AT_CLAW, AD_PHYS, 2, 8 }, { AT_WEAP, AD_PHYS, 3, 6 },
  627. X        { AT_BITE, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK },
  628. X      40, 400, 0, MS_GRUNT, MZ_LARGE,
  629. X      M1_HUMANOID | M1_REGEN | M1_COLLECT,
  630. X      M2_STRONG | M2_STALK | M2_CARNIVORE | M2_HOSTILE, C(HI_LORD) },
  631. X#endif
  632. X/*    Umber Hulk    */
  633. X    { "umber hulk", S_UMBER, 9, 6, 2, 25, 0, (G_GENO | 2),
  634. X      { { AT_CLAW, AD_PHYS, 3, 4 }, { AT_CLAW, AD_PHYS, 3, 4 },
  635. X        { AT_BITE, AD_PHYS, 2, 5 }, { AT_GAZE, AD_CONF, 0, 0 }, NO_ATTK },
  636. X      50, 500, 0, MS_SILENT, MZ_LARGE,
  637. X      M1_TUNNEL, M2_STRONG | M2_CARNIVORE, C(BROWN) },
  638. X/*    Vampires    */
  639. X    { "vampire", S_VAMPIRE, 10, 12, 1, 25, -8, (G_GENO | 1),
  640. X      { { AT_CLAW, AD_PHYS, 1, 6 }, { AT_BITE, AD_DRLI, 1, 6 },
  641. X        NO_ATTK, NO_ATTK, NO_ATTK }, 40, 400, 0, MS_VAMPIRE, MZ_HUMAN,
  642. X      M1_FLY | M1_HUMANOID | M1_POIS | M1_REGEN,
  643. X      M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY, C(RED) },
  644. X    { "vampire lord", S_VAMPIRE, 12, 14, 0, 50, -9, (G_GENO | 1),
  645. X      { { AT_CLAW, AD_PHYS, 1, 8 }, { AT_BITE, AD_DRLI, 1, 8 },
  646. X        NO_ATTK, NO_ATTK, NO_ATTK }, 40, 400, 0, MS_VAMPIRE, MZ_HUMAN,
  647. X      M1_FLY | M1_HUMANOID | M1_POIS | M1_REGEN,
  648. X      M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY | M2_LORD,
  649. X      C(BLUE) },
  650. X    { "Vlad the Impaler", S_VAMPIRE, 14, 18, -3, 80, -10,
  651. X      (G_NOGEN | G_NOCORPSE | G_UNIQ),
  652. X      { { AT_WEAP, AD_PHYS, 1, 6 }, { AT_BITE, AD_DRLI, 1, 6 },
  653. X        NO_ATTK, NO_ATTK, NO_ATTK }, 40, 400, 0, MS_VAMPIRE, MZ_HUMAN,
  654. X      M1_NOPOLY | M1_FLY | M1_HUMANOID | M1_POIS | M1_REGEN,
  655. X      M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_PNAME | M2_STRONG | M2_NASTY |
  656. X      M2_PRINCE, C(HI_LORD) },
  657. X/*    Wraiths     */
  658. X    { "barrow wight", S_WRAITH, 3, 12, 5, 5, -3, (G_GENO | G_NOCORPSE | 1),
  659. X      { { AT_CLAW, AD_PHYS, 1, 4 }, { AT_MAGC, AD_SPEL, 0, 0 },
  660. X        { AT_WEAP, AD_DRLI, 0, 0 }, NO_ATTK, NO_ATTK },
  661. X      30, 0, 0, MS_SILENT, MZ_HUMAN, M1_HUMANOID | M1_POIS_RES | M1_COLLECT,
  662. X      M2_UNDEAD | M2_STALK | M2_HOSTILE, C(GRAY) },
  663. X    { "wraith", S_WRAITH, 6, 12, 4, 15, -6, (G_GENO | 2),
  664. X      { { AT_TUCH, AD_DRLI, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  665. X      30, 0, 0, MS_SILENT, MZ_HUMAN,
  666. X      M1_FLY | M1_HUMANOID | M1_POIS_RES,
  667. X      M2_UNDEAD | M2_STALK | M2_HOSTILE, C(BLACK) },
  668. X#ifdef TOLKIEN
  669. X    { "Nazgul", S_WRAITH, 13, 12, 0, 25, -17, (G_GENO | G_NOCORPSE | 1),
  670. X      { { AT_WEAP, AD_DRLI, 1, 4 }, { AT_BREA, AD_SLEE, 0, 0 },
  671. X        NO_ATTK, NO_ATTK, NO_ATTK }, 30, 0, 0, MS_SILENT, MZ_HUMAN,
  672. X      M1_HUMANOID | M1_POIS_RES | M1_COLLECT,
  673. X      M2_UNDEAD | M2_STALK | M2_STRONG | M2_HOSTILE, C(HI_LORD) },
  674. X#endif
  675. X/*    Xorn    */
  676. X    { "xorn", S_XORN, 8, 9,-2, 20, 0, (G_GENO | 1),
  677. X      { { AT_CLAW, AD_PHYS, 1, 3 }, { AT_CLAW, AD_PHYS, 1, 3 },
  678. X        { AT_CLAW, AD_PHYS, 1, 3 }, { AT_BITE, AD_PHYS, 4, 6 },
  679. X        NO_ATTK }, 70, 700, 0, MS_SILENT, MZ_MEDIUM,
  680. X      M1_WALLWALK | M1_THICK_HIDE | M1_FIRE_RES | M1_COLD_RES |
  681. X      M1_STON_RES, M2_HOSTILE | M2_STRONG, C(BROWN) },
  682. X/*    Yeti    */
  683. X    { "yeti", S_YETI, 5, 15, 6, 0, 0, (G_GENO | 2),
  684. X      { { AT_CLAW, AD_PHYS, 1, 6 }, { AT_CLAW, AD_PHYS, 1, 6 },
  685. X        { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK },
  686. X      70, 700, 0, MS_GROWL, MZ_LARGE, M1_ANIMAL | M1_HUMANOID | M1_COLD_RES,
  687. X      M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(WHITE) },
  688. X/*    Zombies     */
  689. X    { "kobold zombie", S_ZOMBIE, 0, 6, 10, 0, -2, (G_GENO | G_NOCORPSE | 1),
  690. X      { { AT_CLAW, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  691. X      10, 100, 0, MS_SILENT, MZ_SMALL, M1_HUMANOID | M1_POIS |
  692. X      M1_POIS_RES, M2_UNDEAD | M2_STALK | M2_HOSTILE, C(BROWN) },
  693. X    { "gnome zombie", S_ZOMBIE, 1, 6, 10, 0, -2, (G_GENO | G_NOCORPSE | 1),
  694. X      { { AT_CLAW, AD_PHYS, 1, 5 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  695. X      10, 100, 0, MS_SILENT, MZ_SMALL, M1_HUMANOID | M1_POIS |
  696. X      M1_POIS_RES, M2_UNDEAD | M2_STALK | M2_HOSTILE, C(BROWN) },
  697. X    { "orc zombie", S_ZOMBIE, 2, 6, 9, 0, -3,
  698. X      (G_GENO | G_SGROUP | G_NOCORPSE | 1),
  699. X      { { AT_CLAW, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  700. X      15, 150, 0, MS_SILENT, MZ_HUMAN,
  701. X      M1_HUMANOID | M1_POIS_RES | M1_GREEDY |
  702. X      M1_JEWELS, M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_ORC, C(GRAY) },
  703. X    { "elf zombie", S_ZOMBIE, 3, 6, 9, 0, -3,
  704. X      (G_GENO | G_SGROUP | G_NOCORPSE | 1),
  705. X      { { AT_CLAW, AD_PHYS, 1, 7 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  706. X      35, 350, 0, MS_SILENT, MZ_HUMAN,
  707. X      M1_HUMANOID | M1_POIS_RES | M1_SLEE_RES,
  708. X      M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_ELF, C(GREEN) },
  709. X    { "human zombie", S_ZOMBIE, 4, 6, 8, 0, -3,
  710. X      (G_GENO | G_SGROUP | G_NOCORPSE | 1),
  711. X      { { AT_CLAW, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  712. X      40, 400, 0, MS_SILENT, MZ_HUMAN,
  713. X      M1_HUMANOID | M1_POIS_RES,
  714. X      M2_UNDEAD | M2_STALK | M2_HOSTILE, C(HI_DOMESTIC) },
  715. X    { "ettin zombie", S_ZOMBIE, 6, 8, 6, 0, -4, (G_GENO | G_NOCORPSE | 1),
  716. X      { { AT_CLAW, AD_PHYS, 1, 10 }, { AT_CLAW, AD_PHYS, 1, 10 },
  717. X        NO_ATTK, NO_ATTK, NO_ATTK }, 50, 500, 0, MS_SILENT, MZ_HUGE,
  718. X      M1_HUMANOID | M1_POIS_RES,
  719. X      M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_STRONG, C(BLUE) },
  720. X    { "giant zombie", S_ZOMBIE, 8, 8, 6, 0, -4, (G_GENO | G_NOCORPSE | 1),
  721. X      { { AT_CLAW, AD_PHYS, 2, 8 }, { AT_CLAW, AD_PHYS, 2, 8 },
  722. X        NO_ATTK, NO_ATTK, NO_ATTK }, 75, 750, 0, MS_SILENT, MZ_HUGE,
  723. X      M1_HUMANOID | M1_POIS_RES | M1_JEWELS,
  724. X      M2_UNDEAD | M2_STALK | M2_HOSTILE | M2_GIANT | M2_STRONG, C(CYAN) },
  725. X/*    Golems    */
  726. X#ifdef GOLEMS
  727. X    { "straw golem", S_GOLEM, 3, 12, 10, 0, 0, (G_GENO | G_NOCORPSE | 1),
  728. X      { { AT_CLAW, AD_PHYS, 1, 2 }, { AT_CLAW, AD_PHYS, 1, 2 },
  729. X        NO_ATTK, NO_ATTK, NO_ATTK }, 10, 0, 0, MS_SILENT, MZ_LARGE,
  730. X      M1_HUMANOID | M1_POIS_RES, M2_HOSTILE, C(YELLOW) },
  731. X    { "rope golem", S_GOLEM, 4, 9, 8, 0, 0, (G_GENO | G_NOCORPSE | 1),
  732. X      { { AT_CLAW, AD_PHYS, 1, 6 }, { AT_HUGS, AD_PHYS, 6, 1 },
  733. X        NO_ATTK, NO_ATTK, NO_ATTK }, 20, 0, 0, MS_SILENT, MZ_LARGE,
  734. X      M1_HUMANOID | M1_POIS_RES, M2_HOSTILE, C(BROWN) },
  735. X    { "leather golem", S_GOLEM, 6, 6, 6, 0, 0, (G_GENO | G_NOCORPSE | 1),
  736. X      { { AT_CLAW, AD_PHYS, 1, 6 }, { AT_CLAW, AD_PHYS, 1, 6 },
  737. X        NO_ATTK, NO_ATTK, NO_ATTK }, 40, 0, 0, MS_SILENT, MZ_LARGE,
  738. X      M1_HUMANOID | M1_POIS_RES, M2_HOSTILE, C(HI_LEATHER) },
  739. X    { "wood golem", S_GOLEM, 7, 3, 4, 0, 0, (G_GENO | G_NOCORPSE | 1),
  740. X      { { AT_CLAW, AD_PHYS, 3, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  741. X      50, 0, 0, MS_SILENT, MZ_LARGE,
  742. X      M1_HUMANOID | M1_POIS_RES | M1_THICK_HIDE, M2_HOSTILE, C(HI_WOOD) },
  743. X    { "flesh golem", S_GOLEM, 9, 8, 9, 30, 0, (G_GENO | 1),
  744. X      { { AT_CLAW, AD_PHYS, 2, 8 }, { AT_CLAW, AD_PHYS, 2, 8 },
  745. X        NO_ATTK, NO_ATTK, NO_ATTK},
  746. X      60, 600, 0, MS_SILENT, MZ_LARGE,
  747. X      M1_HUMANOID | M1_POIS_RES | M1_FIRE_RES | M1_COLD_RES | M1_ELEC_RES,
  748. X      M2_HOSTILE | M2_STRONG, C(RED) },
  749. X    { "clay golem", S_GOLEM, 11, 7, 7, 40, 0, (G_GENO | G_NOCORPSE | 1),
  750. X      { { AT_CLAW, AD_PHYS, 3, 10 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  751. X      75, 0, 0, MS_SILENT, MZ_LARGE,
  752. X      M1_HUMANOID | M1_POIS_RES | M1_THICK_HIDE,
  753. X      M2_HOSTILE | M2_STRONG, C(BROWN) },
  754. X    { "stone golem", S_GOLEM, 14, 6, 5, 50, 0, (G_GENO | G_NOCORPSE | 1),
  755. X      { { AT_CLAW, AD_PHYS, 3, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  756. X      90, 0, 0, MS_SILENT, MZ_LARGE,
  757. X      M1_HUMANOID | M1_POIS_RES | M1_THICK_HIDE | M1_STON_RES,
  758. X      M2_HOSTILE | M2_STRONG, C(GRAY) },
  759. X    { "iron golem", S_GOLEM, 18, 6, 3, 60, 0, (G_GENO | G_NOCORPSE | 1),
  760. X      { { AT_WEAP, AD_PHYS, 4, 10 }, { AT_BREA, AD_DRST, 4, 6 },
  761. X        NO_ATTK, NO_ATTK, NO_ATTK },
  762. X      100, 0, 0, MS_SILENT, MZ_LARGE,
  763. X      M1_HUMANOID | M1_THICK_HIDE | M1_POIS | M1_FIRE_RES | M1_COLD_RES |
  764. X      M1_ELEC_RES | M1_COLLECT,
  765. X      M2_HOSTILE | M2_STRONG, C(HI_METAL) },
  766. X#endif /* GOLEMS */
  767. X/*    Humans        */
  768. X    { "human", S_HUMAN, 0, 12, 10, 0, 0, G_NOGEN, /* for corpses */
  769. X      { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  770. X      45, 400, 0, MS_HUMANOID, MZ_HUMAN,
  771. X      M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
  772. X      M2_HUMAN | M2_PEACEFUL | M2_STRONG, C(HI_DOMESTIC) },
  773. X    { "wererat", S_HUMAN, 2, 12, 7, 10, -7, 1,
  774. X      { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  775. X      45, 400, 0, MS_SILENT, MZ_HUMAN,
  776. X      M1_NOPOLY | M1_HUMANOID | M1_POIS | M1_REGEN | M1_COLLECT,
  777. X      M2_WERE | M2_HOSTILE | M2_HUMAN, C(BROWN) },
  778. X    { "werejackal", S_HUMAN, 2, 12, 7, 10, -7, 1,
  779. X      { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  780. X      45, 400, 0, MS_BARK, MZ_HUMAN,
  781. X      M1_NOPOLY | M1_HUMANOID | M1_POIS | M1_REGEN | M1_COLLECT,
  782. X      M2_WERE | M2_HOSTILE | M2_HUMAN, C(RED) },
  783. X    { "werewolf", S_HUMAN, 5, 12, 6, 20, -7, 1,
  784. X      { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  785. X      45, 400, 0, MS_BARK, MZ_HUMAN,
  786. X      M1_NOPOLY | M1_HUMANOID | M1_POIS | M1_REGEN | M1_COLLECT,
  787. X      M2_WERE | M2_HOSTILE | M2_HUMAN, C(ORANGE_COLORED) },
  788. X#ifdef TOLKIEN
  789. X    { "Woodland-elf", S_HUMAN, 4, 12, 5, 10, 5, (G_GENO | G_SGROUP | 2),
  790. X      { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  791. X      35, 350, 0, MS_HUMANOID, MZ_HUMAN, M1_HUMANOID |
  792. X      M1_COLLECT | M1_SLEE_RES, M2_ELF, C(GREEN) },
  793. X    { "Green-elf", S_HUMAN, 5, 12, 5, 10, 6, (G_GENO | G_SGROUP | 2),
  794. X      { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  795. X      35, 350, 0, MS_HUMANOID, MZ_HUMAN, M1_HUMANOID |
  796. X      M1_COLLECT | M1_SLEE_RES, M2_ELF, C(GREEN+BRIGHT) },
  797. X    { "Grey-elf", S_HUMAN, 6, 12, 5, 10, 7, (G_GENO | G_SGROUP | 2),
  798. X      { { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  799. X      35, 350, 0, MS_HUMANOID, MZ_HUMAN, M1_HUMANOID |
  800. X      M1_COLLECT | M1_SLEE_RES, M2_ELF, C(GRAY) },
  801. X#endif
  802. X    { "elf-lord", S_HUMAN, 8, 12, 5, 20, 9, (G_GENO | G_SGROUP | 2),
  803. X      { { AT_WEAP, AD_PHYS, 2, 4 }, { AT_WEAP, AD_PHYS, 2, 4 },
  804. X        NO_ATTK, NO_ATTK, NO_ATTK },
  805. X      35, 350, 0, MS_HUMANOID, MZ_HUMAN, M1_HUMANOID |
  806. X      M1_COLLECT | M1_SLEE_RES, M2_ELF | M2_STRONG | M2_LORD, C(BLUE+BRIGHT) },
  807. X    { "Elvenking", S_HUMAN, 9, 12, 5, 25, 10, (G_GENO | 1),
  808. X      { { AT_WEAP, AD_PHYS, 2, 4 }, { AT_WEAP, AD_PHYS, 2, 4},
  809. X        NO_ATTK, NO_ATTK, NO_ATTK },
  810. X      35, 350, 0, MS_HUMANOID, MZ_HUMAN,
  811. X      M1_HUMANOID | M1_COLLECT | M1_SLEE_RES,
  812. X      M2_ELF | M2_STRONG | M2_PRINCE, C(HI_LORD) },
  813. X    { "nurse", S_HUMAN, 11, 6, 0, 0, 0, (G_GENO | 3),
  814. X      { { AT_CLAW, AD_HEAL, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  815. X      45, 400, 0, MS_NURSE, MZ_HUMAN, M1_NOPOLY | M1_HUMANOID | M1_POIS_RES,
  816. X      M2_HUMAN | M2_HOSTILE, C(HI_DOMESTIC) },
  817. X    { "shopkeeper", S_HUMAN, 12, 18, 0, 50, 0, G_NOGEN,
  818. X      { { AT_WEAP, AD_PHYS, 4, 4 }, { AT_WEAP, AD_PHYS, 4, 4 }, NO_ATTK,
  819. X        NO_ATTK, NO_ATTK }, 45, 400, sizeof(struct eshk), MS_SELL, MZ_HUMAN,
  820. X      M1_NOPOLY | M1_HUMANOID | M1_MAGIC | M1_COLLECT,
  821. X      M2_HUMAN | M2_PEACEFUL | M2_STRONG, C(HI_DOMESTIC) },
  822. X    { "guard", S_HUMAN, 12, 12, -1, 40, 10, G_NOGEN,
  823. X      { { AT_WEAP, AD_PHYS, 4, 10 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  824. X      45, 400, sizeof(struct egd), MS_GUARD, MZ_HUMAN,
  825. X      M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
  826. X      M2_HUMAN | M2_MERC | M2_PEACEFUL | M2_STRONG, C(BLUE) },
  827. X#ifdef ORACLE
  828. X    { "oracle", S_HUMAN, 12, 0, 0, 50, 0, G_NOGEN | G_UNIQ,
  829. X      { { AT_NONE, AD_MAGM, 0, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  830. X      45, 400, 0, MS_ORACLE, MZ_HUMAN, M1_NOPOLY | M1_HUMANOID,
  831. X      M2_HUMAN | M2_PEACEFUL | M2_FEM, C(HI_ZAP) },
  832. X#endif
  833. X#if defined(ALTARS) && defined(THEOLOGY)
  834. X    { "temple priest", S_HUMAN, 12, 12, 0, 50, 1, G_NOGEN,
  835. X      { { AT_WEAP, AD_PHYS, 4, 10 }, { AT_KICK, AD_PHYS, 1, 4 },
  836. X        { AT_MAGC, AD_CLRC, 0, 0 }, NO_ATTK, NO_ATTK },
  837. X      45, 400, sizeof(struct epri), MS_PRIEST, MZ_HUMAN,
  838. X      M1_NOPOLY | M1_HUMANOID | M1_ELEC_RES | M1_COLLECT,
  839. X      M2_HUMAN | M2_PEACEFUL, C(WHITE) },
  840. X    { "temple priestess", S_HUMAN, 12, 12, 0, 50, 1, G_NOGEN,
  841. X      { { AT_WEAP, AD_PHYS, 4, 10 }, { AT_KICK, AD_PHYS, 1, 4 },
  842. X        { AT_MAGC, AD_CLRC, 0, 0 }, NO_ATTK, NO_ATTK },
  843. X      45, 400, sizeof(struct epri), MS_PRIEST, MZ_HUMAN,
  844. X      M1_NOPOLY | M1_HUMANOID | M1_ELEC_RES | M1_COLLECT,
  845. X      M2_HUMAN | M2_PEACEFUL | M2_FEM, C(WHITE) },
  846. X#endif
  847. X#ifdef ARMY
  848. X    { "unarmored soldier", S_HUMAN, 6, 4, 10, 0, -2, G_NOGEN,
  849. X      { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  850. X      45, 400, 0, MS_SOLDIER, MZ_HUMAN,
  851. X      M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
  852. X      M2_HUMAN | M2_MERC | M2_STALK | M2_HOSTILE | M2_STRONG, C(BROWN) },
  853. X    { "soldier", S_HUMAN, 6, 4, 3, 0, -2, (G_SGROUP | G_GENO | 1),
  854. X      { { AT_WEAP, AD_PHYS, 1, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  855. X      45, 400, 0, MS_SOLDIER, MZ_HUMAN,
  856. X      M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
  857. X      M2_HUMAN | M2_MERC | M2_STALK | M2_HOSTILE | M2_STRONG, C(GRAY) },
  858. X    { "sergeant", S_HUMAN, 8, 4, 0, 5, -3, (G_SGROUP | G_GENO | 1),
  859. X      { { AT_WEAP, AD_PHYS, 2, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  860. X      45, 400, 0, MS_SOLDIER, MZ_HUMAN,
  861. X      M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
  862. X      M2_HUMAN | M2_MERC | M2_STALK | M2_HOSTILE | M2_STRONG, C(RED) },
  863. X    { "lieutenant", S_HUMAN, 10, 4, -2, 15, -4, (G_GENO | 1),
  864. X      { { AT_WEAP, AD_PHYS, 3, 4 }, { AT_WEAP, AD_PHYS, 3, 4 },
  865. X        NO_ATTK, NO_ATTK, NO_ATTK }, 45, 400, 0, MS_SOLDIER, MZ_HUMAN,
  866. X      M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
  867. X      M2_HUMAN | M2_MERC | M2_STALK | M2_HOSTILE | M2_STRONG, C(GREEN) },
  868. X    { "captain", S_HUMAN, 12, 4, -3, 15, -5, (G_GENO | 1),
  869. X      { { AT_WEAP, AD_PHYS, 4, 4 }, { AT_WEAP, AD_PHYS, 4, 4 },
  870. X        NO_ATTK, NO_ATTK, NO_ATTK }, 45, 400, 0, MS_SOLDIER, MZ_HUMAN,
  871. X      M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
  872. X      M2_HUMAN | M2_MERC | M2_STALK | M2_HOSTILE | M2_STRONG, C(BLUE) },
  873. X#endif
  874. X#ifdef MEDUSA
  875. X    { "Medusa", S_HUMAN, 20, 12, 2, 50, -15, G_NOGEN | G_UNIQ,
  876. X      { { AT_CLAW, AD_PHYS, 1, 8 }, { AT_GAZE, AD_STON, 0, 0 },
  877. X        { AT_BITE, AD_DRST, 1, 6 }, { AT_WEAP, AD_PHYS, 2, 4 }, NO_ATTK },
  878. X      45, 400, 0, MS_HISS, MZ_LARGE,
  879. X      M1_NOPOLY | M1_HUMANOID | M1_SLITHY | M1_POIS | M1_POIS_RES |
  880. X      M1_STON_RES, M2_HOSTILE | M2_STRONG | M2_PNAME | M2_FEM,
  881. X      C(BRIGHT|GREEN) },
  882. X#endif
  883. X    { "Wizard of Yendor", S_HUMAN, 30, 12, -8, 100, -20, G_NOGEN,
  884. X      { { AT_CLAW, AD_SAMU, 2, 12 }, { AT_MAGC, AD_SPEL, 0, 0 },
  885. X        NO_ATTK, NO_ATTK, NO_ATTK }, 45, 400, 0, MS_CUSS, MZ_HUMAN,
  886. X      M1_NOPOLY | M1_FLY | M1_HUMANOID | M1_POIS_RES | M1_FIRE_RES |
  887. X      M1_REGEN | M1_SEE_INVIS | M1_TPORT | M1_TPORT_CONTROL | M1_MAGIC,
  888. X      M2_HUMAN | M2_PNAME | M2_HOSTILE | M2_STRONG | M2_NASTY | M2_PRINCE,
  889. X      C(HI_LORD) },
  890. X#ifdef CHARON
  891. X    { "Charon", S_HUMAN, 76, 18, -5, 120, 0,
  892. X      (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
  893. X      { { AT_WEAP, AD_PHYS, 1, 8 }, { AT_TUCH, AD_PLYS, 1, 8 },
  894. X        NO_ATTK, NO_ATTK, NO_ATTK }, 45, 400, 0, MS_FERRY, MZ_HUMAN,
  895. X      M1_NOPOLY | M1_SEE_INVIS | M1_HUMANOID | M1_POIS_RES | M1_FIRE_RES |
  896. X      M1_GREEDY | M1_COLLECT, M2_HUMAN | M2_PEACEFUL | M2_PNAME,
  897. X      C(WHITE) },
  898. X#endif
  899. X/*    Ghost        */
  900. X    { "ghost", S_GHOST, 10, 3, -5, 50, -5, (G_NOCORPSE | G_NOGEN),
  901. X      { { AT_TUCH, AD_PHYS, 1, 1 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  902. X      45, 0, PL_NSIZ, MS_SILENT, MZ_HUMAN,
  903. X      M1_NOPOLY | M1_FLY | M1_WALLWALK | M1_HUMANOID | M1_POIS_RES,
  904. X      M2_UNDEAD | M2_STALK | M2_HOSTILE, C(GRAY) },
  905. X/*    (major) Demons    */
  906. X    { "water demon", S_DEMON, 8, 12,-4, 30, -7, (G_NOCORPSE | G_NOGEN),
  907. X      { { AT_WEAP, AD_PHYS, 1, 3 }, { AT_CLAW, AD_PHYS, 1, 3 },
  908. X        { AT_BITE, AD_PHYS, 1, 3 }, NO_ATTK, NO_ATTK },
  909. X      45, 450, 0, MS_SILENT, MZ_HUMAN,
  910. X      M1_SWIM | M1_HUMANOID | M1_POIS | M1_FIRE_RES | M1_COLLECT,
  911. X      M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, C(BLUE) },
  912. X#ifndef INFERNO /* generic type */
  913. X    { "demon", S_DEMON, 10, 12,-4, 30, -7, (G_NOCORPSE | 3),
  914. X      { { AT_WEAP, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 },
  915. X        { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK },
  916. X      45, 450, 0, MS_CUSS, MZ_HUMAN,
  917. X      M1_HUMANOID | M1_POIS | M1_FIRE_RES | M1_COLLECT,
  918. X      M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, C(RED) },
  919. X#else    /* used in hell for bigger, badder demons! */
  920. X    /* standard demons & devils */
  921. X    { "horned devil", S_DEMON, 6, 9, -5, 50, 11, (G_HELL | G_NOCORPSE | 2),
  922. X      { { AT_WEAP, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 },
  923. X        { AT_BITE, AD_PHYS, 2, 3 }, { AT_STNG, AD_PHYS, 1, 3 }, NO_ATTK },
  924. X      45, 450, 0, MS_SILENT, MZ_HUMAN,
  925. X      M1_POIS | M1_FIRE_RES | M1_THICK_HIDE,
  926. X      M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, C(BROWN) },
  927. X#ifdef SEDUCE
  928. X    { "succubus", S_DEMON, 6, 12, 0, 70, -9, (G_NOCORPSE | 1),
  929. X      { { AT_BITE, AD_SSEX, 0, 0 }, { AT_CLAW, AD_PHYS, 1, 3 },
  930. X        { AT_CLAW, AD_PHYS, 1, 3 }, NO_ATTK },
  931. X      45, 450, 0, MS_SEDUCE, MZ_HUMAN,
  932. X      M1_HUMANOID | M1_FLY | M1_POIS | M1_FIRE_RES,
  933. X      M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY | M2_FEM, C(GRAY) },
  934. X    { "incubus", S_DEMON, 6, 12, 0, 70, -9, (G_NOCORPSE | 1),
  935. X      { { AT_BITE, AD_SSEX, 0, 0 }, { AT_CLAW, AD_PHYS, 1, 3 },
  936. X        { AT_CLAW, AD_PHYS, 1, 3 }, NO_ATTK },
  937. X      45, 450, 0, MS_SEDUCE, MZ_HUMAN,
  938. X      M1_HUMANOID | M1_FLY | M1_POIS | M1_FIRE_RES,
  939. X      M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, C(GRAY) },
  940. X#else
  941. X    { "succubus", S_DEMON, 6, 12, 0, 70, -9, (G_NOCORPSE | 1),
  942. X      { { AT_CLAW, AD_PHYS, 1, 3 }, { AT_CLAW, AD_PHYS, 1, 3 },
  943. X        { AT_BITE, AD_DRLI, 2, 6 }, NO_ATTK },
  944. X      45, 450, 0, MS_SEDUCE, MZ_HUMAN,
  945. X      M1_HUMANOID | M1_FLY | M1_POIS | M1_FIRE_RES,
  946. X      M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY | M2_FEM, C(GRAY) },
  947. X    { "incubus", S_DEMON, 6, 12, 0, 70, -9, (G_NOCORPSE | 1),
  948. X      { { AT_CLAW, AD_PHYS, 1, 3 }, { AT_CLAW, AD_PHYS, 1, 3 },
  949. X        { AT_BITE, AD_DRLI, 2, 6 }, NO_ATTK },
  950. X      45, 450, 0, MS_SEDUCE, MZ_HUMAN,
  951. X      M1_HUMANOID | M1_FLY | M1_POIS | M1_FIRE_RES,
  952. X      M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, C(GRAY) },
  953. X#endif
  954. X    { "erinyes", S_DEMON, 7, 12, 2, 30, 10,
  955. X      (G_HELL | G_NOCORPSE | G_SGROUP | 2),
  956. X      { { AT_WEAP, AD_DRST, 2, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  957. X      45, 450, 0, MS_SILENT, MZ_HUMAN,
  958. X      M1_HUMANOID | M1_POIS | M1_FIRE_RES | M1_COLLECT,
  959. X      M2_DEMON | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY | M2_FEM,
  960. X      C(RED) },
  961. X    { "marilith", S_DEMON, 7, 12, -6, 80, -12, (G_HELL | G_NOCORPSE | 1),
  962. X      { { AT_WEAP, AD_PHYS, 2, 4 }, { AT_WEAP, AD_PHYS, 2, 4 },
  963. X        { AT_WEAP, AD_PHYS, 2, 4 }, { AT_WEAP, AD_PHYS, 2, 4 },
  964. X        { AT_WEAP, AD_PHYS, 2, 4 }, }, 45, 450, 0, MS_CUSS, MZ_LARGE,
  965. X      M1_HUMANOID | M1_SEE_INVIS | M1_POIS | M1_FIRE_RES | M1_COLLECT |
  966. X      M1_SLITHY,
  967. X      M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY | M2_FEM, C(RED) },
  968. X    { "barbed devil", S_DEMON, 8, 12, 0, 35, 8,
  969. X      (G_HELL | G_NOCORPSE | G_SGROUP | 2),
  970. X      { { AT_CLAW, AD_PHYS, 2, 4 }, { AT_CLAW, AD_PHYS, 2, 4 },
  971. X        { AT_STNG, AD_PHYS, 3, 4 }, NO_ATTK, NO_ATTK },
  972. X      45, 450, 0, MS_SILENT, MZ_HUMAN,
  973. X      M1_POIS | M1_FIRE_RES | M1_THICK_HIDE,
  974. X      M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, C(RED) },
  975. X    { "vrock", S_DEMON, 8, 12, 0, 50, -9,
  976. X      (G_HELL | G_NOCORPSE | G_SGROUP | 2),
  977. X      { { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 },
  978. X        { AT_CLAW, AD_PHYS, 1, 8 }, { AT_CLAW, AD_PHYS, 1, 8 },
  979. X        { AT_BITE, AD_PHYS, 1, 6 }, },
  980. X      45, 450, 0, MS_SILENT, MZ_LARGE, M1_POIS | M1_FIRE_RES,
  981. X      M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, C(RED) },
  982. X    { "hezrou", S_DEMON, 9, 6, -2, 55, -10,
  983. X      (G_HELL | G_NOCORPSE | G_SGROUP | 2),
  984. X      { { AT_CLAW, AD_PHYS, 1, 3 }, { AT_CLAW, AD_PHYS, 1, 3 },
  985. X        { AT_BITE, AD_PHYS, 4, 4 }, NO_ATTK, NO_ATTK }, 45, 450, 0,
  986. X      MS_SILENT, MZ_LARGE, M1_HUMANOID | M1_POIS | M1_FIRE_RES,
  987. X      M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, C(RED) },
  988. X    { "bone devil", S_DEMON, 9, 15, -1, 40, -9,
  989. X      (G_HELL | G_NOCORPSE | G_SGROUP | 2),
  990. X      { { AT_WEAP, AD_PHYS, 3, 4 }, { AT_STNG, AD_DRST, 2, 4 },
  991. X        NO_ATTK, NO_ATTK, NO_ATTK }, 45, 450, 0, MS_SILENT, MZ_LARGE,
  992. X      M1_POIS | M1_FIRE_RES | M1_COLLECT,
  993. X      M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, C(GRAY) },
  994. X    { "nalfeshnee", S_DEMON, 11, 9, -1, 65, -11, (G_HELL | G_NOCORPSE | 1),
  995. X      { { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 },
  996. X        { AT_BITE, AD_PHYS, 2, 4 }, { AT_MAGC, AD_SPEL, 0, 0 }, NO_ATTK },
  997. X      45, 450, 0, MS_SILENT, MZ_LARGE,
  998. X      M1_HUMANOID | M1_POIS | M1_FIRE_RES,
  999. X      M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, C(RED) },
  1000. X    { "ice devil", S_DEMON, 11, 6, -4, 55, -12, (G_HELL | G_NOCORPSE | 2),
  1001. X      { { AT_CLAW, AD_PHYS, 1, 4 }, { AT_CLAW, AD_PHYS, 1, 4 },
  1002. X        { AT_BITE, AD_PHYS, 2, 4 }, { AT_STNG, AD_COLD, 3, 4 }, NO_ATTK },
  1003. X      45, 450, 0, MS_SILENT, MZ_LARGE,
  1004. X      M1_SEE_INVIS | M1_POIS | M1_FIRE_RES | M1_COLD_RES,
  1005. X      M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, C(WHITE) },
  1006. X    { "pit fiend", S_DEMON, 13, 6, -3, 65, -13, (G_HELL | G_NOCORPSE | 2),
  1007. X      { { AT_WEAP, AD_PHYS, 4, 2 }, { AT_WEAP, AD_PHYS, 4, 2 },
  1008. X        { AT_HUGS, AD_PHYS, 2, 4 }, NO_ATTK, NO_ATTK },
  1009. X      45, 450, 0, MS_GROWL, MZ_LARGE,
  1010. X      M1_SEE_INVIS | M1_POIS | M1_FIRE_RES | M1_COLLECT,
  1011. X      M2_DEMON | M2_STALK | M2_HOSTILE | M2_NASTY, C(RED) },
  1012. X    { "balrog", S_DEMON, 16, 5, -2, 75, -14, (G_HELL | G_NOCORPSE | 1),
  1013. X      { { AT_WEAP, AD_PHYS, 8, 4 }, { AT_WEAP, AD_PHYS, 4, 6 },
  1014. X        NO_ATTK, NO_ATTK, NO_ATTK }, 45, 450, 0, MS_SILENT, MZ_LARGE,
  1015. X      M1_FLY | M1_SEE_INVIS | M1_COLLECT | M1_POIS | M1_FIRE_RES,
  1016. X      M2_DEMON | M2_STALK | M2_HOSTILE | M2_STRONG | M2_NASTY, C(RED) },
  1017. X    /* Named demon lords & princes plus Arch-Devils */
  1018. X    { "Juiblex", S_DEMON, 50, 3, -7, 65, -15,
  1019. X      (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
  1020. X      { { AT_ENGL, AD_DISE, 4, 10 }, { AT_SPIT, AD_ACID, 3, 6 },
  1021. X        NO_ATTK, NO_ATTK, NO_ATTK }, 50, 250, 0, MS_GURGLE, MZ_LARGE,
  1022. X      M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_ACID | M1_POIS | M1_FIRE_RES |
  1023. X      M1_AMORPHOUS,
  1024. X      M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY | M2_LORD,
  1025. X      C(BRIGHT|GREEN) },
  1026. X    { "Yeenoghu", S_DEMON, 56, 18, -5, 80, -15,
  1027. X      (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
  1028. X      { { AT_WEAP, AD_PHYS, 3, 6 }, { AT_WEAP, AD_CONF, 2, 8 },
  1029. X        { AT_WEAP, AD_PLYS, 1, 6 }, { AT_MAGC, AD_MAGM, 2, 6 }, NO_ATTK },
  1030. X      50, 500, 0, MS_ORC, MZ_LARGE,
  1031. X      M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_POIS | M1_FIRE_RES |
  1032. X      M1_COLLECT,
  1033. X      M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY | M2_LORD,
  1034. X      C(HI_LORD) },
  1035. X    { "Orcus", S_DEMON, 66, 9, -6, 85, -20,
  1036. X      (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
  1037. X      { { AT_MAGC, AD_SPEL, 8, 6 }, { AT_WEAP, AD_PHYS, 3, 6 },
  1038. X        { AT_CLAW, AD_PHYS, 3, 4 }, { AT_CLAW, AD_PHYS, 3, 4 },
  1039. X        { AT_STNG, AD_DRST, 2, 4 }, }, 50, 500, 0, MS_ORC, MZ_HUGE,
  1040. X      M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_POIS | M1_FIRE_RES |
  1041. X      M1_COLLECT,
  1042. X      M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY | M2_PRINCE,
  1043. X      C(HI_LORD) },
  1044. X    { "Geryon", S_DEMON, 72, 3, -3, 75, 15,
  1045. X      (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
  1046. X      { { AT_CLAW, AD_PHYS, 3, 6 }, { AT_CLAW, AD_PHYS, 3, 6 },
  1047. X        { AT_STNG, AD_DRST, 2, 4 }, NO_ATTK, NO_ATTK },
  1048. X      50, 500, 0, MS_BRIBE, MZ_HUGE,
  1049. X      M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_POIS | M1_FIRE_RES |
  1050. X      M1_SLITHY,
  1051. X      M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY | M2_PRINCE, C(HI_LORD) },
  1052. X    { "Dispater", S_DEMON, 78, 15, -2, 80, 15,
  1053. X      (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
  1054. X      { { AT_WEAP, AD_PHYS, 4, 6 }, { AT_MAGC, AD_SPEL, 6, 6 },
  1055. X        NO_ATTK, NO_ATTK, NO_ATTK }, 50, 500, 0, MS_BRIBE, MZ_HUMAN,
  1056. X      M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_POIS | M1_FIRE_RES |
  1057. X      M1_HUMANOID | M1_COLLECT,
  1058. X      M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY | M2_PRINCE, C(HI_LORD) },
  1059. X    { "Baalzebub", S_DEMON, 89, 9, -5, 85, 20,
  1060. X      (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
  1061. X      { { AT_BITE, AD_DRST, 2, 6 }, { AT_GAZE, AD_STUN, 2, 6 },
  1062. X        NO_ATTK, NO_ATTK, NO_ATTK }, 50, 500, 0, MS_BRIBE, MZ_LARGE,
  1063. X      M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_POIS | M1_FIRE_RES,
  1064. X      M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY | M2_PRINCE,
  1065. X      C(HI_LORD) },
  1066. X    { "Asmodeus", S_DEMON, 105, 12, -7, 90, 20,
  1067. X      (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
  1068. X      { { AT_CLAW, AD_PHYS, 4, 4 }, { AT_MAGC, AD_COLD, 6, 6 },
  1069. X        NO_ATTK, NO_ATTK, NO_ATTK }, 50, 500, 0, MS_BRIBE, MZ_HUGE,
  1070. X      M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_HUMANOID | M1_POIS |
  1071. X      M1_FIRE_RES | M1_COLD_RES,
  1072. X      M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_STRONG | M2_NASTY |
  1073. X      M2_PRINCE, C(HI_LORD) },
  1074. X    { "Demogorgon", S_DEMON, 106, 15, -8, 95, -20,
  1075. X      (G_HELL | G_NOCORPSE | G_NOGEN | G_UNIQ),
  1076. X      { { AT_MAGC, AD_SPEL, 8, 6 }, { AT_STNG, AD_DRLI, 1, 4 },
  1077. X        { AT_CLAW, AD_DISE, 1, 6 }, { AT_CLAW, AD_DISE, 1, 6 },
  1078. X        NO_ATTK }, 50, 500, 0, MS_GROWL, MZ_HUGE,
  1079. X      M1_NOPOLY | M1_FLY | M1_SEE_INVIS | M1_NOHANDS | M1_POIS |
  1080. X      M1_FIRE_RES,
  1081. X      M2_DEMON | M2_STALK | M2_HOSTILE | M2_PNAME | M2_NASTY | M2_PRINCE,
  1082. X      C(HI_LORD) },
  1083. X#endif
  1084. X#ifdef MAIL
  1085. X    { "mail daemon", S_DEMON, 56, 24, 10, 127, 0, (G_NOGEN | G_NOCORPSE),
  1086. X      { NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, 30, 300, 0,
  1087. X      MS_SILENT, MZ_HUMAN, M1_NOPOLY | M1_FLY | M1_SWIM | M1_SEE_INVIS |
  1088. X      M1_HUMANOID | M1_POIS | M1_FIRE_RES | M1_COLD_RES | M1_SLEE_RES,
  1089. X      M2_STALK | M2_PEACEFUL, C(BRIGHT|BLUE) },
  1090. X/* Neither rain nor sleet nor gloom of night shall stay this courier... */
  1091. X#endif
  1092. X    { "djinni", S_DEMON, 7, 12, 4, 30, 0, (G_NOGEN | G_NOCORPSE),
  1093. X      { { AT_WEAP, AD_PHYS, 2, 8 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1094. X      40, 400, 0, MS_DJINNI, MZ_HUMAN,
  1095. X      M1_NOPOLY | M1_HUMANOID | M1_FLY | M1_POIS | M1_COLLECT, M2_STALK,
  1096. X      C(YELLOW) },
  1097. X/*    sea monsters        */
  1098. X    { "giant eel", S_EEL, 5, 9, -1, 0, 0, (G_GENO | G_NOGEN),
  1099. X      { { AT_BITE, AD_PHYS, 3, 6 }, { AT_TUCH, AD_WRAP, 0, 0 },
  1100. X        NO_ATTK, NO_ATTK, NO_ATTK }, 10, 250, 0, MS_SILENT, MZ_HUGE,
  1101. X      M1_SWIM | M1_ANIMAL | M1_SLITHY | M1_NOLIMBS | M1_NOPOLY,
  1102. X      M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(CYAN) },
  1103. X    { "electric eel", S_EEL, 7, 10, -3, 0, 0, (G_GENO | G_NOGEN),
  1104. X      { { AT_BITE, AD_ELEC, 4, 6 }, { AT_TUCH, AD_WRAP, 0, 0 },
  1105. X      NO_ATTK, NO_ATTK, NO_ATTK }, 10, 250, 0, MS_SILENT, MZ_HUGE,
  1106. X      M1_SWIM | M1_ANIMAL | M1_SLITHY | M1_NOLIMBS | M1_NOPOLY |
  1107. X      M1_ELEC_RES, M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(BLUE) },
  1108. X    { "kraken", S_EEL, 20, 3, 6, 0, -3, (G_GENO | G_NOGEN),
  1109. X      { { AT_CLAW, AD_PHYS, 2, 4 }, { AT_CLAW, AD_PHYS, 2, 4 },
  1110. X        { AT_HUGS, AD_WRAP, 2, 6 }, { AT_BITE, AD_PHYS, 5, 4 }, NO_ATTK },
  1111. X      100, 1000, 0, MS_SILENT, MZ_HUGE,
  1112. X      M1_SWIM | M1_ANIMAL | M1_NOHANDS | M1_NOPOLY,
  1113. X      M2_HOSTILE | M2_STRONG | M2_CARNIVORE, C(RED) },
  1114. X/*    lizards     */
  1115. X    { "newt", S_LIZARD, 0, 6, 8, 0, 0, (G_GENO | 5),
  1116. X      { { AT_BITE, AD_PHYS, 1, 2 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1117. X      2, 20, 0, MS_SILENT, MZ_TINY, M1_SWIM | M1_ANIMAL | M1_NOHANDS,
  1118. X      M2_HOSTILE | M2_CARNIVORE, C(YELLOW) },
  1119. X    { "gecko", S_LIZARD, 1, 6, 8, 0, 0, (G_GENO | 5),
  1120. X      { { AT_BITE, AD_PHYS, 1, 3 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1121. X      2, 20, 0, MS_SQEEK, MZ_TINY, M1_ANIMAL | M1_NOHANDS,
  1122. X      M2_HOSTILE | M2_CARNIVORE, C(GREEN) },
  1123. X    { "iguana", S_LIZARD, 2, 6, 7, 0, 0, (G_GENO | 5),
  1124. X      { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1125. X      3, 30, 0, MS_SILENT, MZ_TINY, M1_ANIMAL | M1_NOHANDS,
  1126. X      M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
  1127. X    { "baby crocodile", S_LIZARD, 3, 6, 7, 0, 0, G_GENO,
  1128. X      { { AT_BITE, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1129. X      20, 200, 0, MS_SILENT, MZ_MEDIUM, M1_ANIMAL | M1_NOHANDS | M1_SWIM,
  1130. X      M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
  1131. X    { "lizard", S_LIZARD, 5, 6, 6, 10, 0, (G_GENO | 5),
  1132. X      { { AT_BITE, AD_PHYS, 1, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1133. X      1, 40, 0, MS_SILENT, MZ_TINY, M1_ANIMAL | M1_NOHANDS | M1_STON_RES,
  1134. X      M2_HOSTILE | M2_CARNIVORE, C(GREEN) },
  1135. X    { "chameleon", S_LIZARD, 6, 5, 6, 10, 0, (G_GENO | 2),
  1136. X      { { AT_BITE, AD_PHYS, 4, 2 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1137. X      10, 100, 0, MS_SILENT, MZ_TINY, M1_ANIMAL | M1_NOHANDS | M1_NOPOLY,
  1138. X      M2_HOSTILE | M2_CARNIVORE, C(BROWN) },
  1139. X    { "crocodile", S_LIZARD, 6, 9, 5, 0, 0, (G_GENO | 1),
  1140. X      { { AT_BITE, AD_PHYS, 4, 2 }, { AT_CLAW, AD_PHYS, 1, 12 }, NO_ATTK,
  1141. X      NO_ATTK, NO_ATTK }, 45, 400, 0, MS_SILENT, MZ_LARGE,
  1142. X      M1_ANIMAL | M1_THICK_HIDE | M1_NOHANDS | M1_SWIM,
  1143. X      M2_STRONG | M2_HOSTILE | M2_CARNIVORE | M2_EGGS, C(BROWN) },
  1144. X
  1145. X/*    character classes */
  1146. X    { "archeologist", S_HUMAN, 1, 10, 10, 1, 3, G_NOGEN,
  1147. X      { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1148. X      45, 400, 0, MS_HUMANOID, MZ_HUMAN,
  1149. X      M1_NOPOLY | M1_HUMANOID | M1_COLLECT | M1_TUNNEL | M1_NEEDPICK,
  1150. X      M2_HUMAN | M2_STRONG, C(HI_DOMESTIC) },
  1151. X    { "barbarian", S_HUMAN, 1, 10, 10, 1, -3, G_NOGEN,
  1152. X      { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1153. X      45, 400, 0, MS_HUMANOID, MZ_HUMAN,
  1154. X      M1_NOPOLY | M1_HUMANOID | M1_COLLECT | M1_POIS_RES,
  1155. X      M2_HUMAN | M2_STRONG, C(HI_DOMESTIC) },
  1156. X    { "caveman", S_HUMAN, 1, 10, 10, 0, 1, G_NOGEN,
  1157. X      { {AT_WEAP, AD_PHYS, 2, 4}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1158. X      45, 400, 0, MS_HUMANOID, MZ_HUMAN,
  1159. X      M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
  1160. X      M2_HUMAN | M2_STRONG | M2_CARNIVORE, C(RED) },
  1161. X    { "cavewoman", S_HUMAN, 1, 10, 10, 0, 1, G_NOGEN,
  1162. X      { {AT_WEAP, AD_PHYS, 2, 4}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1163. X      45, 400, 0, MS_HUMANOID, MZ_HUMAN,
  1164. X      M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
  1165. X      M2_HUMAN | M2_STRONG | M2_CARNIVORE | M2_FEM, C(HI_DOMESTIC) },
  1166. X    /* Note: players who are elves still get normal carrying capacity,
  1167. X     * even though this is strictly speaking inconsistent.
  1168. X     */
  1169. X    { "elf", S_HUMAN, 1, 12, 10, 2, 3, G_NOGEN,
  1170. X      { {AT_WEAP, AD_PHYS, 1, 8}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1171. X      35, 350, 0, MS_HUMANOID, MZ_HUMAN,
  1172. X      M1_NOPOLY | M1_HUMANOID | M1_COLLECT | M1_SLEE_RES | M1_SEE_INVIS,
  1173. X      M2_ELF | M2_STRONG, C(HI_DOMESTIC) },
  1174. X    { "healer", S_HUMAN, 1, 10, 10, 1, 3, G_NOGEN,
  1175. X      { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1176. X      45, 400, 0, MS_HUMANOID, MZ_HUMAN,
  1177. X      M1_NOPOLY | M1_HUMANOID | M1_COLLECT | M1_POIS_RES,
  1178. X      M2_HUMAN | M2_STRONG, C(HI_DOMESTIC) },
  1179. X    { "knight", S_HUMAN, 1, 10, 10, 1, 3, G_NOGEN,
  1180. X      { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1181. X      45, 400, 0, MS_HUMANOID, MZ_HUMAN,
  1182. X      M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
  1183. X      M2_HUMAN | M2_STRONG, C(HI_DOMESTIC) },
  1184. X    { "priest", S_HUMAN, 1, 10, 10, 2, 0, G_NOGEN,
  1185. X      { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1186. X      45, 400, 0, MS_HUMANOID, MZ_HUMAN,
  1187. X      M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
  1188. X      M2_HUMAN | M2_STRONG, C(HI_DOMESTIC) },
  1189. X    { "priestess", S_HUMAN, 1, 10, 10, 2, 0, G_NOGEN,
  1190. X      { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1191. X      45, 400, 0, MS_HUMANOID, MZ_HUMAN,
  1192. X      M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
  1193. X      M2_HUMAN | M2_STRONG | M2_FEM, C(HI_DOMESTIC) },
  1194. X    { "rogue", S_HUMAN, 1, 10, 10, 1, -3, G_NOGEN,
  1195. X      { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1196. X      45, 400, 0, MS_HUMANOID, MZ_HUMAN,
  1197. X      M1_NOPOLY | M1_HUMANOID | M1_COLLECT | M1_GREEDY,
  1198. X      M2_HUMAN | M2_STRONG, C(HI_DOMESTIC) },
  1199. X    { "samurai", S_HUMAN, 1, 10, 10, 1, 3, G_NOGEN,
  1200. X      { {AT_WEAP, AD_PHYS, 1, 8}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1201. X      45, 400, 0, MS_HUMANOID, MZ_HUMAN,
  1202. X      M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
  1203. X      M2_HUMAN | M2_STRONG, C(HI_DOMESTIC) },
  1204. X    { "tourist", S_HUMAN, 1, 10, 10, 1, 0, G_NOGEN,
  1205. X      { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1206. X      45, 400, 0, MS_HUMANOID, MZ_HUMAN,
  1207. X      M1_NOPOLY | M1_HUMANOID | M1_COLLECT,
  1208. X      M2_HUMAN | M2_STRONG, C(HI_DOMESTIC) },
  1209. X    { "valkyrie", S_HUMAN, 1, 10, 10, 1, -1, G_NOGEN,
  1210. X      { {AT_WEAP, AD_PHYS, 1, 8}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1211. X      45, 400, 0, MS_HUMANOID, MZ_HUMAN,
  1212. X      M1_NOPOLY | M1_HUMANOID | M1_COLLECT | M1_COLD_RES,
  1213. X      M2_HUMAN | M2_STRONG | M2_FEM, C(HI_DOMESTIC) },
  1214. X    { "wizard", S_HUMAN, 1, 10, 10, 3, 0, G_NOGEN,
  1215. X      { {AT_WEAP, AD_PHYS, 1, 6}, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1216. X      45, 400, 0, MS_HUMANOID, MZ_HUMAN,
  1217. X      M1_NOPOLY | M1_HUMANOID | M1_COLLECT | M1_MAGIC,
  1218. X      M2_HUMAN | M2_STRONG, C(HI_DOMESTIC) },
  1219. X
  1220. X/*    ARRAY TERMINATOR    */
  1221. X    { "", 0, 0, 0, 0, 0, 0, 0,
  1222. X      { NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  1223. X      0, 0, 0, 0, 0, 0, 0, C(0) }
  1224. X};
  1225. X#endif /* !SPLITMON_1 */
  1226. X#endif /* !MAKEDEFS_C */
  1227. END_OF_FILE
  1228. if test 46080 -ne `wc -c <'src/monst.c2'`; then
  1229.     echo shar: \"'src/monst.c2'\" unpacked with wrong size!
  1230. fi
  1231. # end of 'src/monst.c2'
  1232. echo shar: End of archive 23 \(of 30\).
  1233. cp /dev/null ark23isdone
  1234. MISSING=""
  1235. for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 ; do
  1236.     if test ! -f ark${I}isdone ; then
  1237.     MISSING="${MISSING} ${I}"
  1238.     fi
  1239. done
  1240. if test "${MISSING}" = "" ; then
  1241.     echo You have unpacked all 30 archives.
  1242.     rm -f ark[1-9]isdone ark[1-9][0-9]isdone
  1243. else
  1244.     echo You still need to unpack the following archives:
  1245.     echo "        " ${MISSING}
  1246. fi
  1247. ##  End of shell archive.
  1248. exit 0
  1249.